package com.chenl.provider.DEMOS.日志相关.全链路日志以及Spring线程池装饰器的使用.two;

import lombok.extern.slf4j.Slf4j;
import org.slf4j.MDC;

import java.util.Map;
import java.util.Set;

/**
 * 装饰器模式
 * 继承被装饰对象的原始对象，然后以构造的形式传入被装饰对象，方法中执行被装饰对象的方法，另外自己加需要增强的方法
 */
@Slf4j
public class MyrunnableDecorate implements Runnable{
    private Runnable runnable;
    Map<String, String> mdcMap;
    public MyrunnableDecorate(Runnable runnable){
        this.runnable=runnable;
        Map<String, String> copyOfContextMap = MDC.getCopyOfContextMap();
        this.mdcMap=copyOfContextMap;
    }
    @Override
    public void run() {
        Set<Map.Entry<String, String>> entries = mdcMap.entrySet();
        for (Map.Entry<String, String> entry : entries) {
            MDC.put(entry.getKey(),entry.getValue());
        }
        runnable.run();
    }
}
